Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Ridimensionare e salvare picturebox
Forum - C# / VB.NET - [VB.NET] Ridimensionare e salvare picturebox

Avatar
air (Normal User)
Newbie


Messaggi: 14
Iscritto: 23/04/2011

Segnala al moderatore
Postato alle 23:09
Giovedì, 05/05/2011
Ciao a tutti, volevo fare un pultante per salvare il mio form in vb come immagine.
Avevo pensato di catturare lo schermo, metterlo in una picture e ritagliarla alla dimensini del form ma sto avento qualche piccolo problema. Posto il codice:

Codice sorgente - presumibilmente VB.NET

  1. Public Class frm_salva
  2.  
  3.     Private Sub btn_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_save.Click
  4.         FolderBrowserDialog1.ShowDialog() 'seleziona il percorso il cui salvare i file'
  5.         txt_percorso.Text = FolderBrowserDialog1.SelectedPath 'metto il percorso
  6.     End Sub
  7.  
  8.     Private Sub btn_salva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_salva.Click
  9.         pic_save.Image = CaptureScreen()
  10.         Dim x, y, l, h As Short
  11.         l = pic_save.Width
  12.         h = pic_save.Height
  13.         'nuova immagine delle dimensioni della tua picturebox
  14.         Dim img As New Bitmap(l, h)
  15.         x = Me.Location.X
  16.         y = Me.Location.Y
  17.         l = Me.Width
  18.         h = Me.Height
  19.         'classe graphic dell'immagine
  20.         Dim pb_graphic As Graphics = Graphics.FromImage(img)
  21.         'ne prende una parte
  22.         pb_graphic.DrawImageUnscaled(pic_save.Image, 0, 0, l, h)
  23.         'assegna alla tua immagine l'immagine ridimensionata
  24.         pic_save.Image = img
  25.         pic_save.Image.Save(txt_percorso.Text & "\prova.jpeg")
  26.         MsgBox("Salvato!")
  27.     End Sub
  28.     Private Function CaptureScreen() As System.Drawing.Bitmap
  29.         ' Creo un oggetto bitmap di dimensioni uguali allo schermo
  30.         Dim b As Bitmap = New Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height)
  31.         ' Creo l'oggetto graphics
  32.         Dim g As Graphics = Graphics.FromImage(b)
  33.         ' Definisco un oggetto Size con le dimensioni dello schermo
  34.         Dim sz As Size = New Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height)
  35.         ' Catturo l'intera area dello schermo
  36.         g.CopyFromScreen(0, 0, 0, 0, sz, CopyPixelOperation.SourceCopy)
  37.         ' Restituisco l'oggetto bitmap
  38.         Return b
  39.     End Function
  40. End Class



il problema credo sia la funzione drawimageunscaled... Qualcuno sa di preciso come funziona???

Ultima modifica effettuata da air il 05/05/2011 alle 23:17
PM
Avatar
Question (Normal User)
Rookie


Messaggi: 58
Iscritto: 14/12/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 0:31
Venerdì, 06/05/2011
In teoria dovresti dire dove e quale eccezione ti viene restituita 8-|
Perché stai usando drawimageunscaled? Non va bene drawimage?

Comunque, ti linko ad una libreria che permette di catturare una finestra solo con l'handle:
http://www.developerfusion.com/code/4630/capture-a-screen- ...

PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 13:10
Venerdì, 06/05/2011
Non hai bisogno di catturare tutto lo schremo e tagliarlo prima di salvarlo...
Il metodo Graphics.CopyFromScreen ti permette di catturare una parte dello schermo:
Se tu anzichè g.CopyFromScreen( 0, 0, 0, 0 ecc...) usi
g.CopyFromScreen( Me.Left, Me.Top, 0, 0 ecc...) partirai a catturare dalle coordinate del form... ovviamente
Codice sorgente - presumibilmente VB.NET

  1. Dim b As Bitmap = New Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height)
  2. Dim sz As Size = New Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height)


non andranno più bene perchè ti serviranno delle stesse dimensioni della form e non dello schermo...

http://msdn.microsoft.com/it-it/library/cdcw1c3b.aspx

PM